package com.javasm.commons.util;

import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

/**
 * @className: DocxUtil
 * @description:
 * @author:
 * @DATE 2023-03-28  21:51
 * @version: 0.1
 * @since: jdk11
 */
public class DocxUtil {

    public static void createDocx(Object data, String templateName, OutputStream out){
        // 使用freemarker 引擎 来生成word文件
        // 创建一个使用freemarker的配置对象 传入 使用的版本
        Configuration config= new Configuration(Configuration.VERSION_2_3_30);
        //指定使用的编码格式
        config.setDefaultEncoding("UTF-8");
        // 设置模版路径 (使用类加载器读取模板)   传入类加载器和 在类路径下的 模板文件所在的目录
        config.setClassLoaderForTemplateLoading(DocxUtil.class.getClassLoader(),"/docx/");
        try {
//            传入模板名称  路径上面已经指过
            Template template = config.getTemplate(templateName);
            // 输出到哪个位置 需要一个字符输出流
            Writer w = new OutputStreamWriter(out,"UTF-8");
            //给模板传入对应数据 并解析 生成文件
            template.process(data,w);
            //刷新 关闭流
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
